package com.ads.tpgrupo4.server.xml.mappers;

import sun.reflect.generics.reflectiveObjects.NotImplementedException;

import com.ads.tpgrupo4.domain.cpr.core.Rodamiento;
import com.ads.tpgrupo4.domain.cpr.ordenDeCompra.ItemOrdenDeCompra;
import com.ads.tpgrupo4.domain.cpr.ordenDeCompra.ItemOrdenDeCompraPorCotizacion;
import com.ads.tpgrupo4.domain.cpr.ordenDeCompra.OrdenDeCompraPorCotizacion;
import com.ads.tpgrupo4.domain.cpr.proveedores.ItemListaDePreciosDeRodamiento;
import com.ads.tpgrupo4.server.utils.DateUtils;
import com.ads.tpgrupo4.server.xml.StringBasedXmlSource;
import com.ads.tpgrupo4.server.xml.XmlSource;

public class OrdenDeCompraXmlMapper extends AbstractXmlMapper<OrdenDeCompraPorCotizacion> {

	private static OrdenDeCompraXmlMapper instance;
	
	public static OrdenDeCompraXmlMapper getInstance() {

		if (instance == null) {
			instance = new OrdenDeCompraXmlMapper();
		}
		
		return instance;
	}
	
	private OrdenDeCompraXmlMapper() {
	}
	
	@Override
	public XmlSource map(final OrdenDeCompraPorCotizacion oc) {

		final StringBuilder sb = new StringBuilder();
		sb.append("<OrdenCompra numero=\"nroOrdenDeCompra\">\r\n" + 
				" <Emision>fechaOC</Emision>\r\n" + 
				" <Cliente>\r\n" + 
				"  <Cuil>cuilProveedor</Cuil>\r\n" + 
				"  <RazonSocial>razonSocialProveedor</RazonSocial>\r\n" + 
				" </Cliente>\r\n" + 
				" <Rodamientos>\r\n");
		
		for (final ItemOrdenDeCompra itemOC : oc.getItems()) {
			
			String xmlItemOC = "   <Item serie=\"nroDeSerie\"> \r\n" + 
					"    <Sufijo>sufix</Sufijo>\r\n" + 
					"    <Marca>marcaFabricante</Marca>\r\n" + 
					"    <Origen>origenFabricacion</Origen>\r\n" + 
					"    <Cantidad>cantidadUnidades</Cantidad>\r\n" + 
					"   </Item>";
			
			final ItemOrdenDeCompraPorCotizacion item = (ItemOrdenDeCompraPorCotizacion)itemOC;
			final ItemListaDePreciosDeRodamiento itemListaDePreciosAsociado = (ItemListaDePreciosDeRodamiento) item
					.getItemsOrigen().get(0).getItemOrigen()
					.getItemListaDePrecios();
			final Rodamiento rodamiento = itemListaDePreciosAsociado.getRodamiento();
			
			xmlItemOC = xmlItemOC.replace("nroDeSerie", rodamiento.getNumeroDeSerie());
			xmlItemOC = xmlItemOC.replace("sufix", rodamiento.getSufijo() != null ? rodamiento.getSufijo() : "");
			xmlItemOC = xmlItemOC.replace("marcaFabricante", rodamiento.getMarca());
			xmlItemOC = xmlItemOC.replace("origenFabricacion", rodamiento.getOrigen());
			xmlItemOC = xmlItemOC.replace("cantidadUnidades", item.getCantidad().toString());	
			
			sb.append(xmlItemOC);
		}
		sb.append("\r\n</Rodamientos>\r\n</OrdenCompra>");
		
		String xml = sb.toString();
		xml = xml.replace("nroOrdenDeCompra", oc.getNumero().toString());
		xml = xml.replace("fechaOC", DateUtils.toXmlDateTimeString(oc.getFechaEmision()));
		xml = xml.replace("cuilProveedor", oc.getProveedor().getCuil());
		xml = xml.replace("razonSocialProveedor", oc.getProveedor().getRazonSocial());

		return new StringBasedXmlSource(xml);
	}

	@Override
	protected OrdenDeCompraPorCotizacion doMap(final XmlSource source)
			throws Exception {
		throw new NotImplementedException();
	}
	
}
